SOLID 是计算机编程中五个良好原则(规则)的缩写。 SOLID 允许程序员编写更易于理解和稍后更改的代码。 SOLID 通常与使用面向对象设计的系统一起使用。
让我们使用车辆示例来解释 SOLID 原理。想象一下,我们正在设计一个系统来管理不同类型的车辆,例如汽车和电动汽车,以提供运输服务。
车辆示例:假设您有一辆汽车。它负责驾驶,但不应该负责处理自己的维护(例如换油或轮胎旋转)。相反,由一个单独的机械师负责。
解释:在我们的代码中,Vehicle类应该只处理与车辆本身相关的事情,比如存储它的品牌和型号。如果我们需要管理维护,我们会为此创建一个单独的维护类。这样,每个类都有一个工作或职责,使代码更易于管理。
class Vehicle def initialize(make, model) @make = make @model = model end end class Maintenance def initialize(vehicle) @vehicle = vehicle end def perform_maintenance puts "Performing maintenance on #{@vehicle.make} #{@vehicle.model}" end end
车辆示例:假设您有一辆基本型汽车,现在您想在系统中添加一辆电动汽车。您不必修改现有的汽车类别即可添加电动汽车的功能。相反,您可以通过创建新的电动汽车类来扩展现有功能。
说明:Vehicle类对扩展开放(您可以创建新类型的车辆,如ElectricVehicle),但对修改封闭(您不需要更改Vehicle类本身来添加新类型)。
class Vehicle def initialize(make, model) @make = make @model = model end def description "#{@make} #{@model}" end end class ElectricVehicleL - 里氏替换原理 (LSP)
车辆示例:假设您有一支车队,并且您可以毫无问题地用电动汽车替换任何普通汽车。两者都应该能够在不破坏系统的情况下执行其基本功能 - 驾驶 - 。
解释:任何子类(如 ElectricVehicle)都应该能够替换其父类(Vehicle)而不改变程序的行为。这确保了我们的代码可以以相同的方式处理不同类型的车辆。class Vehicle def initialize(make, model) @make = make @model = model end def drive puts "Driving the #{@make} #{@model}" end end class ElectricVehicleI - 接口隔离原则(ISP)
车辆示例:假设您有不同类型的车辆:有些可以充电(如电动汽车),有些只能驾驶(如汽油车)。您不希望汽油车必须处理与充电相关的方法。
解释:类应该只实现它们需要的接口(或行为)。例如,电动车辆可能同时实现可驾驶和可充电接口,而常规车辆仅实现可驾驶。module Drivable def drive raise NotImplementedError, "This #{self.class} cannot drive" end end module Chargeable def charge raise NotImplementedError, "This #{self.class} cannot be charged" end end class Vehicle include Drivable def initialize(make, model) @make = make @model = model end def drive puts "Driving the #{@make} #{@model}" end end class ElectricVehicleD - 依赖倒置原理(DIP)
车辆示例:想象一辆汽车可以有不同类型的发动机:燃气发动机或电动发动机。汽车不应直接依赖于特定的发动机类型,而应依赖于更通用的发动机接口,以便它可以使用任何类型的发动机。
解释:高级模块(如车辆)不应依赖于低级模块(如 GasEngine 或 ElectricEngine)。两者都应该依赖于抽象(如引擎接口)。这使得系统更加灵活并且更容易更改。class Engine def start raise NotImplementedError, "This #{self.class} cannot start" end end class GasEngine通过遵循此车辆示例中的 SOLID 原则,我们可以构建一个易于维护、扩展和适应新要求的系统。
领英:https://www.linkedin.com/in/anandsoni11/
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3